home *** CD-ROM | disk | FTP | other *** search
- #include <Traps.h>
- #include <OSUtils.h>
- #include <GestaltEqu.h>
- #include <Dialogs.h>
- #include <Fonts.h>
- #include <Menus.h>
- #include <Scrap.h>
- #include <Errors.h>
- #include <Events.h>
- #include <Memory.h>
- #include <Dialogs.h>
- #include <Windows.h>
- #include <OSEvents.h>
- #include <TextEdit.h>
- #include <ToolUtils.h>
- #include <Quickdraw.h>
-
- #define TrapMask 0x0800
-
- static short NumToolboxTraps( void )
- {
- if (NGetTrapAddress(_InitGraf, ToolTrap) ==
- NGetTrapAddress(0xAA6E, ToolTrap))
- return(0x0200);
- else
- return(0x0400);
- }
-
- static TrapType GetTrapType(short theTrap)
- {
-
- if ((theTrap & TrapMask) > 0)
- return(ToolTrap);
- else
- return(OSTrap);
-
- }
-
- static Boolean TrapAvailable(short theTrap)
- {
-
- TrapType tType;
-
- tType = GetTrapType(theTrap);
- if (tType == ToolTrap)
- theTrap = theTrap & 0x07FF;
- if (theTrap >= NumToolboxTraps())
- theTrap = _Unimplemented;
-
- return (NGetTrapAddress(theTrap, tType) !=
- NGetTrapAddress(_Unimplemented, ToolTrap));
- }
-
- static char *processor[] = {
- "<unknown>",
- "MC68000",
- "MC68010",
- "MC68020",
- "MC68030",
- "MC68040"
- };
-
- static char *fpu[] = {
- "<none>",
- "MC68881",
- "MC68882",
- "MC68040 built-in"
- };
-
- static void aprintf(char *format, ...)
- {
- Str255 param0;
- unsigned char *p = ¶m0[1];
- va_list ap;
- va_start(ap, format);
- vsprintf((char *)p, format, ap);
- va_end( ap );
- while (*p)
- {
- if (*p == '\n') *p = '\r';
- ++p;
- }
- *param0 = p-param0-1;
- ParamText(param0,0,0,0);
- Alert(128,0);
- }
-
- int gestalt_test (int);
-
- int gestalt_test (int minmajor)
- {
- char *cpu,*fp;
- int major,minor;
- long gestaltAnswer;
- InitGraf(&qd.thePort);
- InitFonts();
- FlushEvents(everyEvent, 0);
- InitWindows();
- InitMenus();
- TEInit();
- InitDialogs(0L);
- InitCursor();
- if (TrapAvailable(_Gestalt)) {
- Gestalt (gestaltProcessorType, &gestaltAnswer);
- if (gestaltAnswer >= sizeof(processor)/sizeof(processor[0])) gestaltAnswer = 0;
- cpu = processor[gestaltAnswer];
- Gestalt (gestaltFPUType, &gestaltAnswer);
- if (gestaltAnswer >= sizeof(fpu)/sizeof(fpu[0])) gestaltAnswer = 0;
- fp = fpu [gestaltAnswer];
- Gestalt (gestaltSystemVersion, &gestaltAnswer);
- major = gestaltAnswer>>8;
- minor = gestaltAnswer&255;
- if (major < minmajor) aprintf ("System Version: %d.%d\n"
- "Processor %s, FPU %s\n"
- "Sorry, System %d required\n"
- , major, minor, cpu, fp, minmajor);
- } else
- {
- aprintf ("Gestalt not available\n");
- major = 0;
- }
- return major;
- }
-
-